package com.cy.sca.controller;

import com.cy.sca.api.annotation.RequiredLog;
import com.cy.sca.api.feign.RemoteNoticeService;
import com.cy.sca.domain.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/member/")
public class MemberController {
    @Value("${server.port}")
    private String port;
    /**
     * 基于此接口中方法进行远程通知服务调用
     */
    @Autowired
    private RemoteNoticeService remoteNoticeService;
    /**
     * 404 资源没找到(访问的url是否正确)
     * 400 客户端发送的请求参数与服务端可接收参数不匹配(个数，格式，类型)
     * 405 请求方式不匹配(服务端定义的是post请求，客户端访问使用get请求)
     * 415 请求数据的类型(Content-Type)与服务端不匹配
     * 401 认证失败(先登录)
     * 403 授权失败
     * ....
     * @param member
     * @return
     */
    @PostMapping
    public String doRegist(@RequestBody Member member){
        System.out.println(port+" do regist " + member);
        HashMap<String, Object> map = new HashMap<>();
        map.put("mobile", "18339231829");
        map.put("code", "1234");
        remoteNoticeService.sendMsg(map);
        return "regist ok";
    }

    /**
     * 通过注解的方式进行AOP，把信息写入文件、数据库
     * @param loginVo
     * @return
     */
    @RequiredLog
    @GetMapping("doLogin")
    public String doLogin(@RequestBody Map<String,Object> loginVo){
        System.out.println(loginVo);
        //假如每次登录都要记录登录日志，你会如何实现？AOP
        return loginVo+"login ok";
    }
}
